
//文件，文件夹的复制、移动
#include "handlefile.h"
#include <QFile>
#include <QDir>
#include<QDebug>
#include<QTextStream>

//文件复制
bool copyFileToPath(QString sourcePath,QString DesPath,bool coverFileIfExist){
    //替换/
    if(sourcePath==NULL||
            sourcePath.isEmpty()||
            DesPath==NULL||
            DesPath.isEmpty()){
        qWarning()<<"input parameter can not be null."<<endl;
        return false;
    }
    QDir sourceDir(sourcePath);
    QDir desDir(DesPath);

    //在同一目录下
    if(sourceDir == desDir) return true;
    //文件存在
    if(!QFile::exists(sourceDir.absolutePath())) return false;
    //新建文件
    QDir *createFile =new QDir;
    bool exist = createFile->exists(desDir.absolutePath());
    if(exist){
        if(coverFileIfExist){
            createFile->remove(desDir.absolutePath());
        }
    }
    QString handleDesPath =  desDir.absolutePath();
    if(!QDir(handleDesPath).exists()){
        if(!PathUtil::makeDirs(handleDesPath,false)){
            qWarning()<<"make dir error in copyFileToPath"<<endl;
            return false;
        }
    }
    if(!QFile::copy(sourceDir.absolutePath(),desDir.absolutePath())){
        qWarning()<<sourceDir.absolutePath()<<"to \n"<<desDir.absolutePath()<<"error"<<endl;
        return false;
    }
    return true;
}

//文件夹复制
bool copyDirFiles(const QString &fromDir,const QString &toDir,bool coverFileIfExist){
    QDir sourceDir(fromDir);
    QDir targetDir(toDir);
    //判断目标目录是否存在，不存在则创建
    if(!targetDir.exists()){
        if(!targetDir.mkdir(targetDir.absolutePath())) return false;
    }
    //获取当前目录所有文件
    QFileInfoList fileInfoList =sourceDir.entryInfoList();
    //遍历
    foreach(QFileInfo fileInfo,fileInfoList){

        if(fileInfo.fileName()=="."||fileInfo.fileName()=="..") continue;
        //进行复制
        if(fileInfo.isDir()){
            if(!copyDirFiles(fileInfo.filePath(),
                             targetDir.filePath(fileInfo.fileName()),coverFileIfExist))
                return false; //复制失败则返回false

        }else{
            if(coverFileIfExist && targetDir.exists(fileInfo.fileName())){
                targetDir.remove(fileInfo.fileName());
            }
            //进行文件复制
            if(!QFile::copy(fileInfo.filePath(),targetDir.filePath(fileInfo.fileName()))){
                return false;
            }
        }
    }
    return true;
}


bool DelDir(const QString &path)
{
    if(path.isNull()){
        return false;
    }
    QDir dir(path);
    if(!dir.exists()){
        return true;
    }
    dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot); //设置过滤
    QFileInfoList fileList = dir.entryInfoList(); // 获取所有的文件信息
    foreach (QFileInfo file, fileList){ //遍历文件信息
        if (file.isFile()){ // 是文件，删除
            file.dir().remove(file.fileName());
        }else{ // 递归删除
            DelDir(file.absoluteFilePath());
        }
    }
    if(dir.exists()){
      return dir.rmpath(dir.absolutePath()); // 删除文件夹
    }
}
bool DelFile(const QList<QString> &NamesList){
    for(int index=0;index<NamesList.count();index++){
         if(!QFileInfo(NamesList.at(index)).dir().remove(QFileInfo(NamesList.at(index)).fileName())){
             return false;
         }
    }
    return true;
}

bool DelFile(const QString &path){
    if(!QFileInfo(path).dir().remove(QFileInfo(path).fileName())){
        return false;
        }
    return true;
}

//Save File

bool  SaveFile(QString filename,QString& str){
    QFile file(filename);
    QDir *createFile =new QDir;
    bool exist = createFile->exists(filename);
    if(exist){
            createFile->remove(filename);
    }
    PathUtil::makeDirs(filename,false);
    if(!file.open(QIODevice::ReadWrite | QIODevice::Text))
    {
        qWarning()<<"error : failed to save file.\n"<<endl;
        return false;
    }
    QTextStream in(&file);
    in << str;
    in.flush();
    file.close();
    return true;
}
